home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / etc / getpwent.old < prev    next >
Text File  |  1990-07-11  |  2KB  |  107 lines

  1. /*
  2.  * Copyright (c) 1984 Regents of the University of California.
  3.  * All rights reserved.  The Berkeley software License Agreement
  4.  * specifies the terms and conditions for redistribution.
  5.  */
  6.  
  7. #if defined(LIBC_SCCS) && !defined(lint)
  8. static char sccsid[] = "@(#)getpwent.c    5.2 (Berkeley) 3/9/86";
  9. #endif LIBC_SCCS and not lint
  10.  
  11. #include <stdio.h>
  12. #include <pwd.h>
  13. #include <ndbm.h>
  14.  
  15. static char EMPTY[] = "";
  16. static FILE *pwf = NULL;
  17. static char line[BUFSIZ+1];
  18. static struct passwd passwd;
  19.  
  20. /*
  21.  * The following are shared with getpwnamuid.c
  22.  */
  23. char    *_pw_file = "/etc/passwd";
  24. DBM    *_pw_db;
  25. int    _pw_stayopen;
  26.  
  27. setpwent()
  28. {
  29.     if (pwf == NULL)
  30.         pwf = fopen(_pw_file, "r");
  31.     else
  32.         rewind(pwf);
  33. }
  34.  
  35. endpwent()
  36. {
  37.     if (pwf != NULL) {
  38.         fclose(pwf);
  39.         pwf = NULL;
  40.     }
  41.     if (_pw_db != (DBM *)0) {
  42.         dbm_close(_pw_db);
  43.         _pw_db = (DBM *)0;
  44.         _pw_stayopen = 0;
  45.     }
  46. }
  47.  
  48. static char *
  49. pwskip(p)
  50. register char *p;
  51. {
  52.     while (*p && *p != ':' && *p != '\n')
  53.         ++p;
  54.     if (*p)
  55.         *p++ = 0;
  56.     return(p);
  57. }
  58.  
  59. struct passwd *
  60. getpwent()
  61. {
  62.     register char *p;
  63.  
  64.     if (pwf == NULL) {
  65.         if ((pwf = fopen( _pw_file, "r" )) == NULL)
  66.             return(0);
  67.     }
  68.     for (;;) {
  69.         p = fgets(line, BUFSIZ, pwf);
  70.         if (p == NULL)
  71.         return(0);
  72.         /* skip leading white space */
  73.         while (*p == ' ' || *p == '\t' || *p == '\n') {
  74.         ++p;
  75.         }
  76.         /* check and make sure this line is not blank */
  77.         if (strlen(p) == 0) {
  78.         continue;
  79.         }
  80.         passwd.pw_name = p;
  81.         p = pwskip(p);
  82.         passwd.pw_passwd = p;
  83.         p = pwskip(p);
  84.         passwd.pw_uid = atoi(p);
  85.         p = pwskip(p);
  86.         passwd.pw_gid = atoi(p);
  87.         passwd.pw_quota = 0;
  88.         passwd.pw_comment = EMPTY;
  89.         p = pwskip(p);
  90.         passwd.pw_gecos = p;
  91.         p = pwskip(p);
  92.         passwd.pw_dir = p;
  93.         p = pwskip(p);
  94.         passwd.pw_shell = p;
  95.         while (*p && *p != '\n')
  96.         p++;
  97.         *p = '\0';
  98.         return(&passwd);
  99.     }
  100. }
  101.  
  102. setpwfile(file)
  103.     char *file;
  104. {
  105.     _pw_file = file;
  106. }
  107.